package c1762;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;

public class D2 {
    static Scanner cin = new Scanner(new BufferedInputStream(System.in));//大量输入优化版本
    static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out));//大量输出优化版本
    static PrintWriter cerr = new PrintWriter(System.err, true);//开启调试模式,一般输出量不大，不需要buffered

    public static void main(String[] args) {
        int m = cin.nextInt();
        int n = cin.nextInt();
        int[] f = new int[m];
        int[] g = new int[n];
        for (int i = 0; i < m; i++) f[i] = cin.nextInt();
        for (int i = 0; i < n; i++) g[i] = cin.nextInt();
        Arrays.sort(g);
        int best = Integer.MAX_VALUE;
        for (int x : f) {
            int left = lowerBound(g, x);
            //g[left]是第一个不小于x的数
            if (left >= n) {
                left = n - 1;
            }
            if (left < 1) {
                left = 1;
            }
            best = Math.min(best, Math.abs(g[left] - x));
            best = Math.min(best, Math.abs(g[left - 1] - x));
            if (best == 0) break;
        }
        cout.println(best);
        cin.close();//关闭输入流
        cout.close();//关闭输出流，这是必须的，否则一般不会自动刷新缓冲区
    }


    /**
     * @param arr
     * @param value
     * @return 第一个大于等于value的数的坐标
     */
    static int lowerBound(int[] arr, int value) {
        int l = 0, r = arr.length - 1;
        while (l <= r) {
            int m = (l + r) / 2;
            if (arr[m] < value) {
                l = m + 1;     // 如果m位置的元素太小，直接把左边界跳到m+1
            } else { // 相当于 arr[m] >= value
                r = m - 1;  // 虽然m有可能是目标解，直接m-1会错过，但是最后如果在 l 和 m -1 里面找不到， l会取“m+1”，跳出循环，这里的“m+1“其实就是错过的目标解、
            }
        }
        return l;
    }

    /**
     * @param arr
     * @param value
     * @return 第一个大于value的数的坐标
     */
    static int upperBound(int[] arr, int value) {
        int l = 0, r = arr.length - 1;
        while (l <= r) {
            int m = (l + r) / 2;
            if (arr[m] <= value) {
                l = m + 1;
            } else {  // arr[m] > value
                r = m - 1;
            }
        }
        return l;
    }
}